/**
 * axios 模块
 *  axios create(config)
 *  a.根据指定配置创建一个新的 axios，也就是每个新 axios都有自己的配置
 *  b.新 axios只是没有取消请求和批量发请求的方法，其它所有语法都是一政的
 *
 * 需求:项目中有部分接口需要的配置与另一部分接口需要的配置不太一样，如何处理
 * 解决:创建2个新axios，每个都有自己特有的配置，分别应用到不同变求的接口请求中
 *
 *
 */

import axios from 'axios'
import store from '@/store'

// 和JSON 方法一样,不过可以处理大数字问题
import JSONBIG from 'json-bigint'

const instance = axios.create({
  // 基地址
  baseURL: 'http://ttapi.research.itcast.cn',
  // 手动转换响应数据
  transformResponse: [
    function(data) {
      try {
        return JSONBIG.parse(data)
      } catch (error) {
        return data
      }
    }
  ]
})

// 在请求拦截器中添加token  拦截器加给instance实例
instance.interceptors.request.use(config => {
  // 判断vuex中值是否有效
  if (store.state.userToken) {
    const token = store.state.userToken.token
    config.headers.Authorization = `Bearer ${token}`
  }

  return config
})

// 默认导出 instance,导入后和axios用法一样
export default instance
